Oozie, Workflow Engine for Apache Hadoop

首先需要知道Oozie工作流引擎有哪些组件,及其作用:

Oozie v3:基于Bundle Engine服务,提供高级oozie抽象批处理一系列coordinator应用.用户可以start/stop/suspend/resume/rerun一系列coordinator jobs在bundle等级下得到更好更简单的操作控制.

Oozie v2:基于Coordinator Engine服务,基于时间或数据来触发运行工作流.可以持续运行工作流基于时间(e.g.每小时运行),和可用数据(e.g. 等待输入数据存在,来运行工作流).

Oozie v1:基于Workflow Engine的服务,运行指定Hadoop MR和Pig作业的工作流活动.

官方文档给了几个要学习的大纲:

分布式文件组成
快速启动
开发文档
活动拓展
Job状态和SLA监控
管理员文档
引擎文档
MiniOozie文档
Oozie用户Authentication文档

1. 分布式文件组成

解压‘tar.gz’文件:

- Readme, license, notice & Release log files.
- Oozie server: oozie-server 目录.
- 脚本: bin/ directory, client and server scripts.
- 二进制文件: lib/ directory, client JAR files.
- 配置: conf/ server configuration directory.
- 工程:
    oozie-client-*.tar.gz : Client tools.
    oozie.war : Oozie WAR file.
    docs.zip : Documentation.
    oozie-examples-*.tar.gz : Examples.
    oozie-sharelib-*.tar.gz : Share libraries (with Streaming, Pig JARs).

2. 概述

Oozie是基于WF引擎来运行指定WF作业(MR、pig作业)的服务.是一个运行在servlet容器的JavaWeb应用,目的是在一个控制依赖(按顺序执行)的DAG中安排一系列活动(MR/pig).

Oozie WF使用hPDL定义语言(类似于JBOSS JBPM定义语言).WF活动启动远程系统的作业(i.e. Hadoop, Pig),在活动完成时,远程系统回调Oozie通知活动完成,然后Oozie处理WF中的下一个活动.WF包含控制流节点和活动节点.

WordCount Workflow Example

wordcount工作流图: ./img/DG_Overview.png

<workflow-app name='wordcount-wf' xmlns="uri:oozie:workflow:0.1">
    <start to='wordcount'/>
    <action name='wordcount'>
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>org.myorg.WordCount.Map</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>org.myorg.WordCount.Reduce</value>
                </property>
                <property>
                    <name>mapred.input.dir</name>
                    <value>${inputDir}</value>
                </property>
                <property>
                    <name>mapred.output.dir</name>
                    <value>${outputDir}</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to='end'/>
        <error to='end'/>
    </action>
    <kill name='kill'>
        <message>Something went wrong: ${wf:errorCode('wordcount')}</message>
    </kill/>
    <end name='end'/>
</workflow-app>

3. 快速启动